home *** CD-ROM | disk | FTP | other *** search
-
- Include "equ.h"
- Include "impequ.h"
-
- SECTION img,CODE,PUBLIC
- ***************************************************
- *** ***
- ***************************************************
- dumbentry:
- clr.l d0
- rts
-
- dc.l "IMPP"
- dc.w 200
- dc.l 0
-
- table: dc.l 0
- dc.l name,special,check,img
-
- *
- * IMG bit image file format
- *
- * the first 32k of the image is in buff1
- *
- check: move.l table,a0
- move.l buff1(a0),a1
- move.l (a1),a1
- cmp.w #1,(a1)+
- bne never
- cmp.w #8,(a1)
- bne never
-
- ; move.l fname(a0),a1
- ;cimg2: move.b (a1)+,d0
- ; beq maybe
- ; cmp.b #'.',d0
- ; bne cimg2
- ; cmp.b #'I',(a1)+
- ; bne maybe
- ; cmp.b #'M',(a1)+
- ; bne maybe
- ; cmp.b #'G',(a1)
- ; bne maybe
- moveq #2,d0 ;it's a match
- irts: rts
- *
- *
- *
- ***********************************************************
- *** ***
- ***********************************************************
- img: move.l table,a0
- move.l spclnum(a0),a0
- cmp.w #1,(a0)
- beq imgobj
- *
- *
- imgpic: bsr getpicinfo
-
- move.l table,a0
- move.l p_open(a0),a0
- jsr (a0)
- beq irts
-
- move.l table,a4
- move.l cwptr(a4),a4
- move.l (a4),a4
- move.l (a4),a4
-
- lea pic,a0
- move.w pc_Type(a0),pi_Type(a4)
- move.w pc_SFreq(a0),pi_SFreq(a4)
- move.w pc_SAngle(a0),pi_SAngle(a4)
- move.w pc_SSpot(a0),pi_SSpot(a4)
- move.l pc_SMap(a0),pi_SMap(a4)
- move.l pc_SMap+4(a0),pi_SMap+4(a4)
- move.w pc_XDpi(a0),pi_XDpi(a4)
- move.w pc_YDpi(a0),pi_YDpi(a4)
- move.w pc_W(a0),pi_W(a4)
- move.w pc_H(a0),pi_H(a4)
- move.w pc_Width(a0),pi_Width(a4)
- move.w pc_BitPln(a0),pi_BitPln(a4)
- move.w pc_Palet(a0),pi_Palet(a4)
-
- move.w pi_Width(a4),d0
- mulu pi_BitPln(a4),d0
- mulu pi_H(a4),d0
-
- clr.w d1
- clr.w d2
- move.l table,a0
- move.l m_alloc(a0),a0
- jsr (a0)
- beq abortpic
-
- move.l table,a3
- move.l cwptr(a3),a3
- move.l (a3),a3
- move.l (a3),a3
- move.l a0,pi_Ptr(a3)
- move.l (a0),a4
- move.l a4,picptr
-
- bsr putpic
-
- move.l table,a0
- move.l p_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
- abortpic:
- move.l table,a0
- move.l p_abort(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
- ***********************************************************
- *** ***
- ***********************************************************
- imgobj: bsr getpicinfo
-
- move.l table,a0
- move.l o_open(a0),a0
- jsr (a0)
- beq irts
-
- move.b #tpic,object+ob_Type
- clr.l object+ob_Left
- clr.l object+ob_Top
-
- move.w pic+pc_W,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_XDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Right
-
- move.w pic+pc_H,d1
- move.l #7200,d0
- bsr Mulu1632
- move.w pic+pc_YDpi,d2
- bsr Divu1648
- move.l d0,object+ob_Bottom
-
- clr.b object+ob_Flag
- clr.w object+ob_Slant
- clr.w object+ob_Twist
- move.w #50,object+ob_LWidth ;1 point line
- clr.b object+ob_LType ;no line
- move.b #1,object+ob_LColor ;black line
- clr.b object+ob_FType ;no fill
- move.b #1,object+ob_FColor ;black fill
- clr.b object+ob_LBegin
- clr.b object+ob_LEnd
- move.w #900,object+ob_HStandOff ;1/8 inch
- move.w #900,object+ob_VStandOff ;1/8 inch
- *
- *
- move.l table,a1
- move.l o_obj(a1),a1
- lea object,a0
- jsr (a1)
- beq abortobj
-
- move.w pic+pc_Width,d0
- mulu pic+pc_BitPln,d0
- mulu pic+pc_H,d0
- add.l #pc_Sizeof,d0
-
- move.l table,a0
- move.l o_malloc(a0),a0
- jsr (a0)
- beq abortobj
-
- lea pic,a1
- clr.l pc_DPtr(a1)
- clr.w pc_DScale(a1)
- move.l #pc_Sizeof,pc_Ptr(a1)
-
- move.w #pc_Sizeof/2-1,d0
- oppic1: move.w (a1)+,(a0)+
- dbf d0,oppic1
- move.l a0,picptr
-
- bsr putpic
- *
- * end of input file. close and flush buffer
- *
- move.l table,a0
- move.l o_close(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
- *
- *
- abortobj:
- move.l table,a0
- move.l o_abort(a0),a0
- jsr (a0)
-
- move.l table,a0
- move.l f_closer(a0),a0
- jmp (a0)
-
-
- getpicinfo:
- move.l table,a0
- move.l f_openr(a0),a0
- jsr (a0)
- beq irts
-
- move.l table,a1
- move.l buff1(a1),a0
- move.l (a0),a0
- move.l #16,d0
- move.l f_getr(a1),a1
- jsr (a1)
- beq irts
-
- move.l table,a0
- move.l buff1(a0),a0
- move.l (a0),a0
- move.w 4(a0),pic+pc_BitPln
- move.w 6(a0),ptrn
- move.w 8(a0),pxw
- move.w 10(a0),pxh
- move.w 12(a0),d0
- move.w d0,pic+pc_W
- add.w #15,d0
- lsr.w #3,d0
- bclr #0,d0
- move.w d0,pic+pc_Width
- move.w 14(a0),dheight
- move.w dheight,pic+pc_H
- move.w #PC_BW,pic+pc_Type
- move.w #-1,pic+pc_SFreq ;default frequency
- move.w #-1,pic+pc_SAngle ;default angle
- clr.w pic+pc_SSpot
- clr.l pic+pc_SMap
- clr.l pic+pc_SMap+4
-
- clr.w pic+pc_Palet ;number of color pallet entries
-
- move.l #25500,d0
- divu pxw,d0
- move.w d0,pic+pc_XDpi ;x dots per inch
- move.l #25500,d0
- divu pxh,d0
- move.w d0,pic+pc_YDpi ;y dots per inch
- rts
-
- *
- *
- *
- putpic: move.w pic+pc_Width,d0
- mulu pic+pc_H,d0
- move.l d0,plane
-
- move.w pic+pc_W,d0
- add.w #7,d0
- lsr.w #3,d0
- move.w d0,wide
-
- imgp3: move.l picptr,tpptr
- move.w pic+pc_BitPln,temp2 ;do for each bitplane
-
- imgp4: move.w wide,temp3
- move.l tpptr,a0
- clr.w rlecnt ;current rle count
- move.w #1,vrepcnt
-
- imgp5: move.l a0,-(sp)
- jsr getnext
- move.l (sp)+,a0
- move.b d0,(a0)+
- subq.w #1,temp3 ;next byte in row
- bne imgp5
- clr.b (a0)+
- clr.b (a0)+
-
- move.l plane,d0
- add.l d0,tpptr
- subq.w #1,temp2
- bne imgp4 ;next bitplane row
- *
- *
- move.w vrepcnt,d7
- subq.w #1,d7
- move.l picptr,a4
- bra unc9
- unc1: move.l a4,a3
- move.w pic+pc_BitPln,d6
- bra unc5
- unc2: move.l a3,a1
- move.l a2,a0
- move.w wide,d5
- bra unc4
- unc3: move.b (a1)+,(a0)+
- unc4: dbf d5,unc3
- add.l plane,a3
- add.l plane,a2
- unc5: dbf d6,unc2
- unc9: move.l picptr,a2
- add.w pic+pc_Width,a2 ;width
- move.l a2,picptr
- subq.w #1,pic+pc_H
- beq irts
- dbf d7,unc1
-
- bra imgp3 ;next scan line
-
-
-
- ***********************************************************
- *** ***
- ***********************************************************
- *
- *
- * IMG getnext byte from run length encoded? picture
- * (something strange like it)
- *
- * rlecmd - 0 replicate zeros
- * rlecmd - 1 replicate ones
- * rlecmd - 2 from file
- *
- getnext:
- subq.w #1,rlecnt
- bcc more
- gn1: clr.w rlecmd ;uncompressed
- move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- and.w #$ff,d0
- cmp.b #$80,d0 ;bit string
- beq gn3
- cmp.b #0,d0 ;pattern
- beq gn4
- tst.b d0
- bpl gn2 ;zero replicate
- move.w #1,rlecmd ; ones replicate
- gn2: and.b #$7f,d0
- move.w d0,rlecnt
- bra getnext
-
- gn3: move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- and.w #$ff,d0
- move.w d0,rlecnt
- move.w #2,rlecmd ;bit string
- bra getnext
-
-
- gn4: move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- tst.b d0
- beq gn5 ;vertical replication count
- and.w #$ff,d0
- mulu ptrn,d0
- move.w d0,rlecnt
-
- lea pattern,a2
- move.w ptrn,d1
- bra gn4b
- gn4a: move.l a2,-(sp)
- move.w d1,-(sp)
- move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- move.w (sp)+,d1
- move.l (sp)+,a2
- move.b d0,(a2)+
- gn4b: dbf d1,gn4a
-
- move.w #3,rlecmd ;pattern string
- bra getnext
-
- gn5: move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- cmp.b #$ff,d0
- bne getnext
- move.l table,a0
- move.l f_get(a0),a0
- jsr (a0)
- and.w #$ff,d0
- move.b d0,vrepcnt+1
- clr.w rlecnt
- bra getnext
- *
- *
- more: cmp.w #1,rlecmd ;will take care of that for us.
- beq rep_1
- bcs rep_0
- cmp.w #3,rlecmd
- beq reppat
- move.l table,a0
- move.l f_get(a0),a0
- jmp (a0)
-
- reppat: move.w ptrn,d1
- lea pattern,a0
- move.b (a0),d0
- bra repp2
- repp1: move.b 1(a0),(a0)+
- repp2: subq.w #1,d1
- bne repp1
- move.b d0,(a0)
- rts
-
- rep_1: move.w #$ff,d0
- rts
- rep_0: moveq #0,d0
- rts
- *
-
- Mulu1632:
- move.l table,a0
- move.l mulu1632(a0),a0
- jmp (a0)
-
- Divu1648:
- move.l table,a0
- move.l divu1648(a0),a0
- jmp (a0)
-
- *******************************************************************
- *** called when the import routine choosen finds something ***
- *** wrong with the file loaded. ***
- *******************************************************************
- notright:
- rts
-
- never: moveq #0,d0
- rts
-
- maybe: moveq #1,d0
- rts
-
- right: moveq #2,d0
- rts
-
- *************************************************************
- *************************************************************
- SECTION img,DATA,PUBLIC
-
- special:
- dc.w 2
- dc.l spcl1,spcl2
-
- name: dc.b "IMG Bit Image File v2.0.0",0
- spcl1: dc.b "Picture Window",0
- spcl2: dc.b "Object",0
-
- SECTION img,BSS,PUBLIC
- *
- bitpln: ds.w 1
- colors: ds.w 1
- wide: ds.w 1
- dheight: ds.w 1
- nxtscn: ds.w 1
- pxh: ds.w 1
- pxw: ds.w 1
-
- plane: ds.l 1
- pptr: ds.l 1
- tpptr: ds.l 1
-
- rlecmd: ds.w 1
- rlecnt: ds.w 1
- ptrn: ds.w 1
- pattern: ds.l 2
- vrepcnt: ds.w 1
-
- temp1: ds.w 1
- temp2: ds.w 1
- temp3: ds.w 1
-
-
- object: ds.w ob_SizeOf/2
- array: ds.w 3
- pic: ds.w pc_Sizeof/2
-
- count: ds.l 1
- len: ds.l 1
- fhandle: ds.w 1
-
- picptr: ds.l 1
-
- *
-